﻿#include "QGlobalStatus.h"

// 单例对象指针
static QGlobalStatus* globalStatusInstance = nullptr;
static QMutex globalStatusInstanceMutex;

QGlobalStatus::QGlobalStatus()
{
    // 初始化代码（如果需要的话）
}

QGlobalStatus::~QGlobalStatus()
{
    // 清理代码（如果需要的话）
}

// 获取单例实例
QGlobalStatus* QGlobalStatus::instance()
{
    if (globalStatusInstance == nullptr) {
        QMutexLocker locker(&globalStatusInstanceMutex);
        if (globalStatusInstance == nullptr) {
            globalStatusInstance = new QGlobalStatus();
        }
    }
    return globalStatusInstance;
}

// 基本类型设置与获取
void QGlobalStatus::setStatus(const QString &key, int8_t value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant(value);
}

int8_t QGlobalStatus::getStatus(const QString &key, int8_t defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant(defaultValue)).toInt();
}

void QGlobalStatus::setStatus(const QString &key, int16_t value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant(value);
}

int16_t QGlobalStatus::getStatus(const QString &key, int16_t defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant(defaultValue)).toInt();
}

void QGlobalStatus::setStatus(const QString &key, int32_t value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant(value);
}

int32_t QGlobalStatus::getStatus(const QString &key, int32_t defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant(defaultValue)).toInt();
}

void QGlobalStatus::setStatus(const QString &key, int64_t value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant(value);
}

int64_t QGlobalStatus::getStatus(const QString &key, int64_t defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant(defaultValue)).toLongLong();
}

void QGlobalStatus::setStatus(const QString &key, uint8_t value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant(static_cast<uint>(value));
}

uint8_t QGlobalStatus::getStatus(const QString &key, uint8_t defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant(static_cast<uint>(defaultValue))).toUInt();
}

void QGlobalStatus::setStatus(const QString &key, uint16_t value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant(static_cast<uint>(value));
}

uint16_t QGlobalStatus::getStatus(const QString &key, uint16_t defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant(static_cast<uint>(defaultValue))).toUInt();
}

void QGlobalStatus::setStatus(const QString &key, uint32_t value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant(static_cast<uint>(value));
}

uint32_t QGlobalStatus::getStatus(const QString &key, uint32_t defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant(static_cast<uint>(defaultValue))).toUInt();
}

void QGlobalStatus::setStatus(const QString &key, uint64_t value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant(static_cast<quint64>(value));
}

uint64_t QGlobalStatus::getStatus(const QString &key, uint64_t defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant(static_cast<quint64>(defaultValue))).toULongLong();
}

void QGlobalStatus::setStatus(const QString &key, float value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant(value);
}

float QGlobalStatus::getStatus(const QString &key, float defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant(defaultValue)).toFloat();
}

void QGlobalStatus::setStatus(const QString &key, double value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant(value);
}

double QGlobalStatus::getStatus(const QString &key, double defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant(defaultValue)).toDouble();
}

void QGlobalStatus::setStatus(const QString &key, const std::string &value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant(QString::fromStdString(value));
}

std::string QGlobalStatus::getStatus(const QString &key, const std::string &defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant(QString::fromStdString(defaultValue))).toString().toStdString();
}

void QGlobalStatus::setStatus(const QString &key, const QString &value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant(value);
}

QString QGlobalStatus::getStatus(const QString &key, const QString &defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant(defaultValue)).toString();
}

void QGlobalStatus::remove(const QString &key)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap.remove(key);
}

void QGlobalStatus::clear()
{
    QMutexLocker locker(&m_mutex);
    m_statusMap.clear();
}

// 容器类型设置与获取
template<typename T>
void QGlobalStatus::setStatus(const QString &key, const QList<T> &value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant::fromValue(value);
}

template<typename T>
QList<T> QGlobalStatus::getStatus(const QString &key, const QList<T> &defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant::fromValue(defaultValue)).value<QList<T>>();
}

template<typename T>
void QGlobalStatus::setStatus(const QString &key, const QVector<T> &value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant::fromValue(value);
}

template<typename T>
QVector<T> QGlobalStatus::getStatus(const QString &key, const QVector<T> &defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant::fromValue(defaultValue)).value<QVector<T>>();
}

template<typename T>
void QGlobalStatus::setStatus(const QString &key, const QSet<T> &value)
{
    QMutexLocker locker(&m_mutex);
    m_statusMap[key] = QVariant::fromValue(value);
}

template<typename T>
QSet<T> QGlobalStatus::getStatus(const QString &key, const QSet<T> &defaultValue) const
{
    QMutexLocker locker(&m_mutex);
    return m_statusMap.value(key, QVariant::fromValue(defaultValue)).value<QSet<T>>();
}

// 显式模板实例化QList
template void QGlobalStatus::setStatus<int8_t>(const QString &key, const QList<int8_t> &value);
template QList<int8_t> QGlobalStatus::getStatus<int8_t>(const QString &key, const QList<int8_t> &defaultValue) const;

template void QGlobalStatus::setStatus<int16_t>(const QString &key, const QList<int16_t> &value);
template QList<int16_t> QGlobalStatus::getStatus<int16_t>(const QString &key, const QList<int16_t> &defaultValue) const;

template void QGlobalStatus::setStatus<int32_t>(const QString &key, const QList<int32_t> &value);
template QList<int32_t> QGlobalStatus::getStatus<int32_t>(const QString &key, const QList<int32_t> &defaultValue) const;

template void QGlobalStatus::setStatus<int64_t>(const QString &key, const QList<int64_t> &value);
template QList<int64_t> QGlobalStatus::getStatus<int64_t>(const QString &key, const QList<int64_t> &defaultValue) const;

template void QGlobalStatus::setStatus<uint8_t>(const QString &key, const QList<uint8_t> &value);
template QList<uint8_t> QGlobalStatus::getStatus<uint8_t>(const QString &key, const QList<uint8_t> &defaultValue) const;

template void QGlobalStatus::setStatus<uint16_t>(const QString &key, const QList<uint16_t> &value);
template QList<uint16_t> QGlobalStatus::getStatus<uint16_t>(const QString &key, const QList<uint16_t> &defaultValue) const;

template void QGlobalStatus::setStatus<uint32_t>(const QString &key, const QList<uint32_t> &value);
template QList<uint32_t> QGlobalStatus::getStatus<uint32_t>(const QString &key, const QList<uint32_t> &defaultValue) const;

template void QGlobalStatus::setStatus<uint64_t>(const QString &key, const QList<uint64_t> &value);
template QList<uint64_t> QGlobalStatus::getStatus<uint64_t>(const QString &key, const QList<uint64_t> &defaultValue) const;

template void QGlobalStatus::setStatus<float>(const QString &key, const QList<float> &value);
template QList<float> QGlobalStatus::getStatus<float>(const QString &key, const QList<float> &defaultValue) const;

template void QGlobalStatus::setStatus<double>(const QString &key, const QList<double> &value);
template QList<double> QGlobalStatus::getStatus<double>(const QString &key, const QList<double> &defaultValue) const;

template void QGlobalStatus::setStatus<std::string>(const QString &key, const QList<std::string> &value);
template QList<std::string> QGlobalStatus::getStatus<std::string>(const QString &key, const QList<std::string> &defaultValue) const;

template void QGlobalStatus::setStatus<QString>(const QString &key, const QList<QString> &value);
template QList<QString> QGlobalStatus::getStatus<QString>(const QString &key, const QList<QString> &defaultValue) const;

// 显式模板实例化QVector
template void QGlobalStatus::setStatus<int8_t>(const QString &key, const QVector<int8_t> &value);
template QVector<int8_t> QGlobalStatus::getStatus<int8_t>(const QString &key, const QVector<int8_t> &defaultValue) const;

template void QGlobalStatus::setStatus<int16_t>(const QString &key, const QVector<int16_t> &value);
template QVector<int16_t> QGlobalStatus::getStatus<int16_t>(const QString &key, const QVector<int16_t> &defaultValue) const;

template void QGlobalStatus::setStatus<int32_t>(const QString &key, const QVector<int32_t> &value);
template QVector<int32_t> QGlobalStatus::getStatus<int32_t>(const QString &key, const QVector<int32_t> &defaultValue) const;

template void QGlobalStatus::setStatus<int64_t>(const QString &key, const QVector<int64_t> &value);
template QVector<int64_t> QGlobalStatus::getStatus<int64_t>(const QString &key, const QVector<int64_t> &defaultValue) const;

template void QGlobalStatus::setStatus<uint8_t>(const QString &key, const QVector<uint8_t> &value);
template QVector<uint8_t> QGlobalStatus::getStatus<uint8_t>(const QString &key, const QVector<uint8_t> &defaultValue) const;

template void QGlobalStatus::setStatus<uint16_t>(const QString &key, const QVector<uint16_t> &value);
template QVector<uint16_t> QGlobalStatus::getStatus<uint16_t>(const QString &key, const QVector<uint16_t> &defaultValue) const;

template void QGlobalStatus::setStatus<uint32_t>(const QString &key, const QVector<uint32_t> &value);
template QVector<uint32_t> QGlobalStatus::getStatus<uint32_t>(const QString &key, const QVector<uint32_t> &defaultValue) const;

template void QGlobalStatus::setStatus<uint64_t>(const QString &key, const QVector<uint64_t> &value);
template QVector<uint64_t> QGlobalStatus::getStatus<uint64_t>(const QString &key, const QVector<uint64_t> &defaultValue) const;

template void QGlobalStatus::setStatus<float>(const QString &key, const QVector<float> &value);
template QVector<float> QGlobalStatus::getStatus<float>(const QString &key, const QVector<float> &defaultValue) const;

template void QGlobalStatus::setStatus<double>(const QString &key, const QVector<double> &value);
template QVector<double> QGlobalStatus::getStatus<double>(const QString &key, const QVector<double> &defaultValue) const;

template void QGlobalStatus::setStatus<std::string>(const QString &key, const QVector<std::string> &value);
template QVector<std::string> QGlobalStatus::getStatus<std::string>(const QString &key, const QVector<std::string> &defaultValue) const;

template void QGlobalStatus::setStatus<QString>(const QString &key, const QVector<QString> &value);
template QVector<QString> QGlobalStatus::getStatus<QString>(const QString &key, const QVector<QString> &defaultValue) const;

// 显式模板实例化QSet
template void QGlobalStatus::setStatus<int8_t>(const QString &key, const QSet<int8_t> &value);
template QSet<int8_t> QGlobalStatus::getStatus<int8_t>(const QString &key, const QSet<int8_t> &defaultValue) const;

template void QGlobalStatus::setStatus<int16_t>(const QString &key, const QSet<int16_t> &value);
template QSet<int16_t> QGlobalStatus::getStatus<int16_t>(const QString &key, const QSet<int16_t> &defaultValue) const;

template void QGlobalStatus::setStatus<int32_t>(const QString &key, const QSet<int32_t> &value);
template QSet<int32_t> QGlobalStatus::getStatus<int32_t>(const QString &key, const QSet<int32_t> &defaultValue) const;

template void QGlobalStatus::setStatus<int64_t>(const QString &key, const QSet<int64_t> &value);
template QSet<int64_t> QGlobalStatus::getStatus<int64_t>(const QString &key, const QSet<int64_t> &defaultValue) const;

template void QGlobalStatus::setStatus<uint8_t>(const QString &key, const QSet<uint8_t> &value);
template QSet<uint8_t> QGlobalStatus::getStatus<uint8_t>(const QString &key, const QSet<uint8_t> &defaultValue) const;

template void QGlobalStatus::setStatus<uint16_t>(const QString &key, const QSet<uint16_t> &value);
template QSet<uint16_t> QGlobalStatus::getStatus<uint16_t>(const QString &key, const QSet<uint16_t> &defaultValue) const;

template void QGlobalStatus::setStatus<uint32_t>(const QString &key, const QSet<uint32_t> &value);
template QSet<uint32_t> QGlobalStatus::getStatus<uint32_t>(const QString &key, const QSet<uint32_t> &defaultValue) const;

template void QGlobalStatus::setStatus<uint64_t>(const QString &key, const QSet<uint64_t> &value);
template QSet<uint64_t> QGlobalStatus::getStatus<uint64_t>(const QString &key, const QSet<uint64_t> &defaultValue) const;

template void QGlobalStatus::setStatus<float>(const QString &key, const QSet<float> &value);
template QSet<float> QGlobalStatus::getStatus<float>(const QString &key, const QSet<float> &defaultValue) const;

template void QGlobalStatus::setStatus<double>(const QString &key, const QSet<double> &value);
template QSet<double> QGlobalStatus::getStatus<double>(const QString &key, const QSet<double> &defaultValue) const;

template void QGlobalStatus::setStatus<std::string>(const QString &key, const QSet<std::string> &value);
template QSet<std::string> QGlobalStatus::getStatus<std::string>(const QString &key, const QSet<std::string> &defaultValue) const;

template void QGlobalStatus::setStatus<QString>(const QString &key, const QSet<QString> &value);
template QSet<QString> QGlobalStatus::getStatus<QString>(const QString &key, const QSet<QString> &defaultValue) const;

